home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / svgacc23 / svgadem2.c < prev    next >
C/C++ Source or Header  |  1995-01-19  |  31KB  |  1,206 lines

  1. /****************************************************************************
  2.      
  3.       'SVGACC' A Super Vga Graphics Library for use with Microsoft compatible
  4.       C/C++ compilers
  5.       Copyright 1993-1995 by Stephen L. Balkum and Daniel A. Sill
  6.  
  7.     **************** UNREGISTERD SHAREWARE VERSION ***********************
  8.     * FOR EVUALATION ONLY. NOT FOR RESALE IN ANY FORM. SOFTWARE WRITTEN  *
  9.     * USING THIS UNREGISTERED SHAREWARE GRAPHICS LIBRARY MAY NOT BY SOLD *
  10.     * OR USED FOR ANY PURPOSE OTHER THAN THE EVUALTION OF THIS LIBRARY.  *
  11.     **********************************************************************
  12.  
  13.     **************** NO WARRANTIES AND NO LIABILITY **********************
  14.     * Stephen L. Balkum and Daniel A. Sill provide no warranties, either *
  15.     * expressed or implied, of merchantability, or fitness, for a        *
  16.     * particular use or purpose of this SOFTWARE and documentation.      *
  17.     * In no event shall Stephen L. Balkum or Daniel A. Sill be held      *
  18.     * liable for any damages resulting from the use or misuse of the     * 
  19.     * SOFTWARE and documentation.                                        *
  20.     **********************************************************************
  21.  
  22.     ************** U.S. GOVERNMENT RESTRICTED RIGHTS *********************
  23.     * Use, duplication, or disclosure of the SOFTWARE and documentation  *
  24.     * by the U.S. Government is subject to the restictions as set forth  *
  25.     * in subparagraph (c)(1)(ii) of the Rights in Technical Data and     *
  26.     * Computer Software cluse at DFARS 252.227-7013.                     *
  27.     * Contractor/manufacturer is Stephen L. Balkum and Daniel A. Sill,   *
  28.     * P.O. Box 7704, Austin, Texas 78713-7704                            *
  29.     **********************************************************************
  30.  
  31.     **********************************************************************
  32.     * By using this SOFTWARE or documentation, you agree to the above    *
  33.     * terms and conditions.                                              *
  34.     **********************************************************************
  35.  
  36.  ***************************************************************************/
  37.  
  38. #define MODULE
  39.  
  40. #include <stdio.h>
  41. #include <conio.h>
  42. #include <malloc.h>
  43. #include <string.h>
  44. #include <dos.h>
  45. #include <math.h>
  46.  
  47. #include "svgacc.h"
  48.  
  49. #include "svgademo.h"
  50.  
  51. char showpcx(char fname[]);
  52. void showhouse(D2Point *plotarray, D2Point *oplotarray);
  53. void showstar(D2Point *plotarray, D2Point *oplotarray);
  54.  
  55.  
  56. /********
  57.  * DO2D *
  58.  ********/
  59.  
  60. char do2d(void)
  61. {
  62.     int i, trans;
  63.     int spcing, cntx, cnty;
  64.     D2Point pointarray[9];
  65.     D2Point plotarray[9];
  66.     D2Point oplotarray[9];
  67.     char ret;
  68.     char title[TITLEN];
  69.     char buf[TITLEN];
  70.     char buf2[TITLEN];
  71.  
  72.     /*
  73.      * Set up the Title
  74.      */
  75.     sprintf(title,"DEMO 11: 2D functions");
  76.     palset(pal,0,255);
  77.  
  78.     /*
  79.      * Set up the star patter of points
  80.      */
  81.     cntx = maxx / 2;
  82.     cnty = (maxy - 32) / 2 + 32;
  83.     spcing = maxx / 15;
  84.     pointarray[0].x = 0;
  85.     pointarray[0].y = -spcing * 3;
  86.     pointarray[1].x = spcing;
  87.     pointarray[1].y = -spcing;
  88.     pointarray[2].x = spcing * 3;
  89.     pointarray[2].y = 0;
  90.     pointarray[3].x = spcing;
  91.     pointarray[3].y = spcing;
  92.     pointarray[4].x = 0;
  93.     pointarray[4].y = spcing * 3;
  94.     pointarray[5].x = -spcing;
  95.     pointarray[5].y = spcing;
  96.     pointarray[6].x = -spcing * 3;
  97.     pointarray[6].y = 0;
  98.     pointarray[7].x = -spcing;
  99.     pointarray[7].y = -spcing;
  100.     pointarray[8].x = 0;
  101.     pointarray[8].y = -spcing * 3;
  102.  
  103.     /*
  104.      * Show d2translate
  105.      */
  106.     fillscreen(0);
  107.     setview(0,0,maxx,maxy);
  108.     drwstring(SET,7,0,title,10,0);
  109.     sprintf(buf,"d2translate(point,xtrans,ytrans,inarray,outarray);");
  110.     drwstring(SET,7,0,buf,10,16);
  111.     setview(0,32,maxx,maxy);
  112.     d2translate(9,cntx,cnty,pointarray,plotarray);
  113.     showstar(plotarray,oplotarray);
  114.     ret = getkey();
  115.     if ((ret=='s') || (ret=='q')) {
  116.         fillscreen(0);
  117.         setview(0,0,maxx,maxy);
  118.         return(ret);
  119.     }
  120.     trans = 0;
  121.     for(i=0;i<spcing;i++) {
  122.         trans+=2;
  123.         d2translate(9,cntx+trans,cnty+trans,pointarray,plotarray);
  124.         showstar(plotarray,oplotarray);
  125.         sdelay(2);
  126.     }
  127.     for(i=0;i<spcing;i++) {
  128.         trans-=2;
  129.         d2translate(9,cntx+trans,cnty+trans,pointarray,plotarray);
  130.         showstar(plotarray,oplotarray);
  131.         sdelay(2);
  132.     }
  133.     ret = getkey();
  134.     if ((ret=='s') || (ret=='q')) {
  135.         fillscreen(0);
  136.         setview(0,0,maxx,maxy);
  137.         return(ret);
  138.     }
  139.  
  140.     /*
  141.      * Show d2scale
  142.      */
  143.     setview(0,16,maxx,31);
  144.     fillview(0);
  145.     setview(0,16,maxx,maxy);
  146.     sprintf(buf,"d2scale(points,xscale,yscale,inarray,outarray);");
  147.     drwstring(SET,7,0,buf,10,16);
  148.     setview(0,32,maxx,maxy);
  149.     d2translate(9,cntx,cnty,pointarray,plotarray);
  150.     showstar(plotarray,oplotarray);
  151.     for(i=256;i<=380;i+=4) {
  152.         d2scale(9,i,i,pointarray,plotarray);
  153.         d2translate(9,cntx,cnty,plotarray,plotarray);
  154.         showstar(plotarray,oplotarray);
  155.         sdelay(2);
  156.     }
  157.     for(i=384;i>=128;i-=4) {
  158.         d2scale(9,i,i,pointarray,plotarray);
  159.         d2translate(9,cntx,cnty,plotarray,plotarray);
  160.         showstar(plotarray,oplotarray);
  161.         sdelay(2);
  162.     }
  163.     for(i=124;i<=256;i+=4) {
  164.         d2scale(9,i,i,pointarray,plotarray);
  165.         d2translate(9,cntx,cnty,plotarray,plotarray);
  166.         showstar(plotarray,oplotarray);
  167.         sdelay(2);
  168.     }
  169.     ret = getkey();
  170.     if ((ret=='s') || (ret=='q')) {
  171.         fillscreen(0);
  172.         setview(0,0,maxx,maxy);
  173.         return(ret);
  174.     }
  175.  
  176.     /*
  177.      * Show d2rotate
  178.      */
  179.     setview(0,16,maxx,31);
  180.     fillview(0);
  181.     setview(0,16,maxx,maxy);
  182.     sprintf(buf,"d2rotate(points,xorigin,yorigin,angle,inarray,outarray);");
  183.     drwstring(SET,7,0,buf,10,16);
  184.     sprintf(buf2,"Let's do it about the center of the object.");
  185.     drwstring(SET,7,0,buf2,10,32);
  186.     setview(0,48,maxx,maxy);
  187.     d2translate(9,cntx,cnty,pointarray,plotarray);
  188.     showstar(plotarray,oplotarray);
  189.     for(i=0;i<=180;i++) {
  190.         d2rotate(9,0,0,i,pointarray,plotarray);
  191.         d2translate(9,cntx,cnty,plotarray,plotarray);
  192.         showstar(plotarray,oplotarray);
  193.         sdelay(2);
  194.     }
  195.     for(i=180;i>=0;i-=2) {
  196.         d2rotate(9,0,0,i,pointarray,plotarray);
  197.         d2translate(9,cntx,cnty,plotarray,plotarray);
  198.         showstar(plotarray,oplotarray);
  199.         sdelay(2);
  200.     }
  201.     ret = getkey();
  202.     if ((ret=='s') || (ret=='q')) {
  203.         fillscreen(0);
  204.         setview(0,0,maxx,maxy);
  205.         return(ret);
  206.     }
  207.  
  208.     /*
  209.      * Show d2rotate (about an arbitrary point)
  210.      */
  211.     setview(0,16,maxx,48);
  212.     fillview(0);
  213.     setview(0,16,maxx,maxy);
  214.     sprintf(buf,"d2rotate(points,xorigin,yorigin,angle,inarray,outarray);");
  215.     drwstring(SET,7,0,buf,10,16);
  216.     sprintf(buf2,"Let's do it about an arbitrary point.");
  217.     drwstring(SET,7,0,buf2,10,32);
  218.     setview(0,48,maxx,maxy);
  219.     d2translate(9,cntx,cnty,pointarray,plotarray);
  220.     showstar(plotarray,oplotarray);
  221.     for(i=0;i<=360;i+=2) {
  222.         d2rotate(9,0,spcing*3,i,pointarray,plotarray);
  223.         d2translate(9,cntx,cnty,plotarray,plotarray);
  224.         showstar(plotarray,oplotarray);
  225.         sdelay(2);
  226.     }
  227.     ret = getkey();
  228.     
  229.     fillscreen(0);
  230.     setview(0,0,maxx,maxy);
  231.     
  232.     return(ret);
  233.  
  234. }
  235.  
  236. /********
  237.  * DO3D *
  238.  ********/
  239.  
  240. char do3d(void)
  241. {
  242.     float pi;
  243.     int i;
  244.     float height, radius;
  245.     int spcing;
  246.     D3Point pointarray[14];
  247.     D3Point playarray[14];
  248.     D2Point plotarray[14];
  249.     D2Point oplotarray[14];
  250.     ProjParameters proj;
  251.     char ret;
  252.     char title[TITLEN];
  253.     char buf[TITLEN];
  254.     
  255.  
  256.     /*
  257.      * Set up the Title
  258.      */
  259.     sprintf(title,"DEMO 12: 3D functions");
  260.     palset(pal,0,255);
  261.  
  262.     /*
  263.      * Set up the house pattern of points
  264.      */
  265.     spcing = maxx / 6;
  266.     pointarray[0].x = -spcing;
  267.     pointarray[0].y = -spcing * 2;
  268.     pointarray[0].z = 0;
  269.     pointarray[1].x = spcing;
  270.     pointarray[1].y = -spcing * 2;
  271.     pointarray[1].z = 0;
  272.     pointarray[2].x = spcing;
  273.     pointarray[2].y = -spcing * 2;
  274.     pointarray[2].z = spcing * 2;
  275.     pointarray[3].x = -spcing;
  276.     pointarray[3].y = -spcing * 2;
  277.     pointarray[3].z = spcing * 2;
  278.     pointarray[4].x = -spcing;
  279.     pointarray[4].y = spcing * 2;
  280.     pointarray[4].z = 0;
  281.     pointarray[5].x = spcing;
  282.     pointarray[5].y = spcing * 2;
  283.     pointarray[5].z = 0;
  284.     pointarray[6].x = spcing;
  285.     pointarray[6].y = spcing * 2;
  286.     pointarray[6].z = spcing * 2;
  287.     pointarray[7].x = -spcing;
  288.     pointarray[7].y = spcing * 2;
  289.     pointarray[7].z = spcing * 2;
  290.     pointarray[8].x = 0;
  291.     pointarray[8].y = -spcing * 2;
  292.     pointarray[8].z = spcing * 3;
  293.     pointarray[9].x = 0;
  294.     pointarray[9].y = spcing * 2;
  295.     pointarray[9].z = spcing * 3;
  296.     pointarray[10].x = 0;
  297.     pointarray[10].y = 0;
  298.     pointarray[10].z = 0;
  299.     pointarray[11].x = spcing * 4;
  300.     pointarray[11].y = 0;
  301.     pointarray[11].z = 0;
  302.     pointarray[12].x = 0;
  303.     pointarray[12].y = 0;
  304.     pointarray[12].z = spcing * 4;
  305.     pointarray[13].x = 0;
  306.     pointarray[13].y = spcing * 4;
  307.     pointarray[13].z = 0;
  308.     bytecopy(pointarray,playarray,sizeof(pointarray));
  309.  
  310.     /*
  311.      * Show d3project
  312.      */
  313.     setview(0,0,maxx,maxy);
  314.     pi = (float)(4. * atan(1) / 180.);
  315.     fillscreen(0);
  316.     drwstring(SET,7,0,title,10,0);
  317.     sprintf(buf,"d3project(points,projparams,inarray,outarray);");
  318.     drwstring(SET,7,0,buf,10,16);
  319.     setview(0,32,maxx,maxy);
  320.     height = (float)(maxy * 8);
  321.     radius = (float)(maxx * 30);
  322.     proj.scrd = (int)(sqrt(radius * radius + height * height) / 2.);
  323.     proj.theta = 110;
  324.     proj.phi = (int)(atan(height / -radius) / pi);
  325.     proj.eyex = (int)(-radius * cos(proj.theta * pi));
  326.     proj.eyey = (int)(-radius * sin(proj.theta * pi));
  327.     proj.eyez = (int)height;
  328.     d3project(14,&proj,playarray,plotarray);
  329.     for(i=0;i<14;i++) {
  330.         oplotarray[i].x = plotarray[i].x;
  331.         oplotarray[i].y = plotarray[i].y;
  332.     }
  333.     showhouse(plotarray,oplotarray);
  334.     ret = getkey();
  335.     if ((ret=='s') || (ret=='q')) {
  336.         fillscreen(0);
  337.         setview(0,0,maxx,maxy);
  338.         return(ret);
  339.     }
  340.     for(i=112;i<=470;i+=3) {
  341.         proj.theta = i;
  342.         proj.eyex = (int)(-radius * cos(proj.theta * pi));
  343.         proj.eyey = (int)(-radius * sin(proj.theta * pi));
  344.         d3project(14,&proj,playarray,plotarray);
  345.         showhouse(plotarray,oplotarray);
  346.         sdelay(2);
  347.     }
  348.     ret = getkey();
  349.     if ((ret=='s') || (ret=='q')) {
  350.         fillscreen(0);
  351.         setview(0,0,maxx,maxy);
  352.         return(ret);
  353.     }
  354.  
  355.     /*
  356.      * Show d3translate
  357.      */
  358.     setview(0,16,maxx,31);
  359.     fillview(0);
  360.     sprintf(buf,"d3translate(points,xtrans,ytrans,ztrans,inarray,outarray);");
  361.     drwstring(SET,7,0,buf,10,16);
  362.     setview(0,32,maxx,maxy);
  363.     for(i=2;i<=300;i+=6) {
  364.         d3translate(10,i,i,0,pointarray,playarray);
  365.         d3project(10,&proj,playarray,plotarray);
  366.         showhouse(plotarray,oplotarray);
  367.         sdelay(2);
  368.     }
  369.     for(i=302;i>=2;i-=6) {
  370.         d3translate(10,i,i,0,pointarray,playarray);
  371.         d3project(10,&proj,playarray,plotarray);
  372.         showhouse(plotarray,oplotarray);
  373.         sdelay(2);
  374.     }
  375.     ret = getkey();
  376.     if ((ret=='s') || (ret=='q')) {
  377.         fillscreen(0);
  378.         setview(0,0,maxx,maxy);
  379.         return(ret);
  380.     }
  381.  
  382.     /*
  383.      * Show d3scale
  384.      */
  385.     setview(0,16,maxx,31);
  386.     fillview(0);
  387.     sprintf(buf,"d3scale(points,xscale,yscale,zscale,inarray,outarray);");
  388.     drwstring(SET,7,0,buf,10,16);
  389.     setview(0,32,maxx,maxy);
  390.     for(i=256;i<=380;i+=4) {
  391.         d3scale(10,i,i,i,pointarray,playarray);
  392.         d3project(10,&proj,playarray,plotarray);
  393.         showhouse(plotarray,oplotarray);
  394.         sdelay(2);
  395.     }
  396.     for(i=384;i>=128;i-=4) {
  397.         d3scale(10,i,i,i,pointarray,playarray);
  398.         d3project(10,&proj,playarray,plotarray);
  399.         showhouse(plotarray,oplotarray);
  400.         sdelay(2);
  401.     }
  402.     for(i=124;i<=256;i+=4) {
  403.         d3scale(10,i,i,i,pointarray,playarray);
  404.         d3project(10,&proj,playarray,plotarray);
  405.         showhouse(plotarray,oplotarray);
  406.         sdelay(2);
  407.     }
  408.     ret = getkey();
  409.     if ((ret=='s') || (ret=='q')) {
  410.         fillscreen(0);
  411.         setview(0,0,maxx,maxy);
  412.         return(ret);
  413.     }
  414.  
  415.     /*
  416.      * show d3rotate
  417.      */
  418.     setview(0,16,maxx,31);
  419.     fillview(0);
  420.     sprintf(buf,"d3rotate(points,xorigin,yorigin,zorigin,zangle,yangle,xangle,inarray,outarray);");
  421.     drwstring(SET,7,0,buf,10,16);
  422.     setview(0,32,maxx,maxy);
  423.     for(i=0;i<=360;i+=3) {
  424.         d3rotate(10,0,0,0,0,i,i,pointarray,playarray);
  425.         d3project(10,&proj,playarray,plotarray);
  426.         showhouse(plotarray,oplotarray);
  427.         sdelay(2);
  428.     }
  429.     
  430.     ret = getkey();
  431.  
  432.     fillscreen(0);
  433.     setview(0,0,maxx,maxy);
  434.  
  435.     return(ret);
  436.  
  437. }
  438.  
  439. /***********
  440.  * DOMOUSE *
  441.  ***********/
  442.  
  443. char domouse(void)
  444. {
  445.     int i, mouse;
  446.     int colr, x1, x2, y1, y2;
  447.     int lb, cb, rb, x, y, mbuts;
  448.     int spcing;
  449.     char ret;
  450.     char title[TITLEN];
  451.     char buf[TITLEN];
  452.  
  453.     /*
  454.      * Set up the title
  455.      */
  456.     sprintf(title,"DEMO 9: Mouse functions");
  457.     fillscreen(0);
  458.     palset(pal,0,255);
  459.     setview(0,0,maxx,maxy);
  460.  
  461.     /*
  462.      * Check to see if we have a mouse so we can do the mouse demo
  463.      */
  464.     mouse = whichmouse();
  465.     if (mouse < 1) {
  466.         drwstring(SET,7,0,title,10,0);
  467.         sprintf(buf,"Sorry, no mouse detected... Can not do the mouse demo.");
  468.         drwstring(SET,7,0,buf,10,16);
  469.         ret = getkey();
  470.         fillscreen(0);
  471.         return(ret);
  472.     }
  473.     colr = 16;
  474.     for(i=0;i<=maxx/2;i++) {
  475.         drwcircle(SET,colr,maxx/4 + i, maxy/2, maxy/5);
  476.         colr+=2;
  477.         if (colr>255)
  478.             colr = 16;
  479.     }
  480.  
  481.     /*
  482.      * Show mouseshow
  483.      */
  484.     setview(0,0,maxx,31);
  485.     fillview(0);   
  486.     drwstring(SET,7,0,title,10,0);
  487.     sprintf(buf,"mouseshow();");
  488.     drwstring(SET,7,0,buf,10,16);
  489.     setview(0,32,maxx,maxy);
  490.     mouseenter(); /* MUST BE CALLED FIRST TO ENABLE MOUSE FUNCTIONS */
  491.     mouseshow();
  492.     ret = getkey();
  493.     if ((ret=='s') || (ret=='q')) {
  494.         mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */
  495.         fillscreen(0);
  496.         setview(0,0,maxx,maxy);
  497.         return(ret);
  498.     }
  499.  
  500.     /*
  501.      * Show mousestatus
  502.      */
  503.     mousehide();
  504.     setview(0,16,maxx,31);
  505.     fillview(0);
  506.     sprintf(buf,"mousestatus(xloc,yloc,mbuts);");
  507.     drwstring(SET,7,0,buf,10,16);
  508.     mouseshow();
  509.     setview(0,32,maxx,maxy);
  510.     beep();
  511.     while(!kbhit()) {
  512.         lb = cb = rb = 0;
  513.         mousestatus(&x,&y,&mbuts);
  514.         if (mbuts & 1)
  515.             lb = 1;
  516.         if (mbuts & 2)
  517.             rb = 1;
  518.         if (mbuts & 4)
  519.             cb = 1;
  520.         sprintf(buf,"X= %4d  Y= %4d  LB= %1d  CB= %1d  RB= %1d",x,y,lb,cb,rb);
  521.         drwstring(SET,15,8,buf,10,32);
  522.     }
  523.     ret = (char)getch();
  524.     if ( (ret == 'Q') || (ret == 'q') )
  525.         endit = 1;
  526.     if (ret == 'Q')
  527.         ret = 'q';
  528.     if (ret == 'S')
  529.         ret = 's';
  530.     if ((ret=='s') || (ret=='q')) {
  531.         mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */
  532.         fillscreen(0);
  533.         setview(0,0,maxx,maxy);
  534.         return(ret);
  535.     }
  536.  
  537.     /*
  538.      * Show mousehide
  539.      */
  540.     mousehide();
  541.     setview(0,16,maxx,31);
  542.     fillview(0);
  543.     sprintf(buf,"mousehide(xloc,yloc,mbuts);");
  544.     drwstring(SET,7,0,buf,10,16);
  545.     setview(0,32,maxx,maxy);
  546.     beep();
  547.     while(!kbhit()) {
  548.         lb = cb = rb = 0;
  549.         mousestatus(&x,&y,&mbuts);
  550.         if (mbuts & 1)
  551.             lb = 1;
  552.         if (mbuts & 2)
  553.             rb = 1;
  554.         if (mbuts & 4)
  555.             cb = 1;
  556.         sprintf(buf,"X= %4d  Y= %4d  LB= %1d  CB= %1d  RB= %1d",x,y,lb,cb,rb);
  557.         drwstring(SET,15,8,buf,10,32);
  558.     }
  559.     ret = (char)getch();
  560.     if ( (ret == 'Q') || (ret == 'q') )
  561.         endit = 1;
  562.     if (ret == 'Q')
  563.         ret = 'q';
  564.     if (ret == 'S')
  565.         ret = 's';
  566.     if ((ret=='s') || (ret=='q')) {
  567.         mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */
  568.         fillscreen(0);
  569.         setview(0,0,maxx,maxy);
  570.         return(ret);
  571.     }
  572.  
  573.     /*
  574.      * Show mouserangeset
  575.      */
  576.     mousehide();
  577.     setview(0,16,maxx,31);
  578.     fillview(0);
  579.     sprintf(buf,"mouserangeset(x1,y1,x2,y2);");
  580.     drwstring(SET,7,0,buf,10,16);
  581.     setview(0,32,maxx,maxy);
  582.     spcing = (maxy - 32) / 3;
  583.     x1 = spcing;
  584.     y1 = 32 + spcing;
  585.     x2 = maxx - spcing;
  586.     y2 = maxy - spcing;
  587.     drwbox(SET,15,x1,y1,x2,y2);
  588.     mouseshow();
  589.     mouserangeset(x1,y1,x2,y2);
  590.     ret = getkey();
  591.     mouserangeset(0,0,maxx,maxy);
  592.     if ((ret=='s') || (ret=='q')) {
  593.         mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */
  594.         fillscreen(0);
  595.         setview(0,0,maxx,maxy);
  596.         return(ret);
  597.     }
  598.  
  599.     /*
  600.      * Show mousecursorset - use the magnifier
  601.      */
  602.     setview(0,16,maxx,31);
  603.     fillview(0);
  604.     sprintf(buf,"mousecursorset(mousecursor);");
  605.     drwstring(SET,7,0,buf,10,16);
  606.     setview(0,32,maxx,maxy);
  607.     mousecursorset(&magmousecursor);
  608.     ret = getkey();
  609.     if ((ret=='s') || (ret=='q')) {
  610.         mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */
  611.         fillscreen(0);
  612.         setview(0,0,maxx,maxy);
  613.         return(ret);
  614.     }
  615.  
  616.     /*
  617.      * Show mousecursorset - use the big arrow
  618.      */
  619.     setview(0,32,maxx,maxy);
  620.     mousecursorset(&bigmousecursor);
  621.     ret = getkey();
  622.     if ((ret=='s') || (ret=='q')) {
  623.         mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */
  624.         fillscreen(0);
  625.         setview(0,0,maxx,maxy);
  626.         return(ret);
  627.     }
  628.  
  629.     /*
  630.      * Show mousecursorset - use the stopwatch
  631.      */
  632.     setview(0,32,maxx,maxy);
  633.     mousecursorset(&stwmousecursor);
  634.     ret = getkey();
  635.     if ((ret=='s') || (ret=='q')) {
  636.         mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */
  637.         fillscreen(0);
  638.         setview(0,0,maxx,maxy);
  639.         return(ret);
  640.     }
  641.  
  642.     /*
  643.      * Show mousecursordefault
  644.      */
  645.     mousehide();
  646.     setview(0,16,maxx,31);
  647.     fillview(0);
  648.     sprintf(buf,"mousecursordefault();");
  649.     drwstring(SET,7,0,buf,10,16);
  650.     mouseshow();
  651.     setview(0,32,maxx,maxy);
  652.     mousecursordefault();
  653.     ret = getkey();
  654.     mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */
  655.     fillscreen(0);
  656.     setview(0,0,maxx,maxy);
  657.  
  658.     return(ret);
  659.  
  660. }
  661.  
  662.  
  663. /*********
  664.  * DOPCX *
  665.  *********/
  666.  
  667. char dopcx(void)
  668. {
  669.     
  670.     int endthis;
  671.     int ext, length;
  672.     char c, ret;
  673.     char title[TITLEN];
  674.     char buf[TITLEN];
  675.     char *fname;
  676.  
  677.     fname=malloc(128);
  678.  
  679.     /*
  680.      * Setup the title
  681.      */
  682.     sprintf(title,"DEMO 8: PCX functions");
  683.  
  684.     /*
  685.      * Show pcxgetinfo
  686.      */
  687.     setview(0,0,maxx,maxy);
  688.     fillscreen(0);
  689.     drwstring(SET,7,0,title,10,0);
  690.     endthis = 0;
  691.     ret = '\0';
  692.  
  693.     while (!endthis) {
  694.         sprintf(buf,"Please provide the name (and full path if not in the current drive/directory)");
  695.         drwstring(SET,7,0,buf,10,64);
  696.         sprintf(buf,"of a PCX file you would like to see...");
  697.         drwstring(SET,7,0,buf,10,80);
  698.         sprintf(buf,"Filename:");
  699.         drwstring(SET,7,0,buf,10,96);
  700.  
  701.         sprintf(fname,"_");
  702.         length = 0;
  703.         ext = 0;
  704.         c = '\0';
  705.  
  706.         while(!ext) {
  707.             drwstring(SET,7,0,fname,82,96);
  708.             c = (char)getch();
  709.             if(c>=' ' && c<='~') {
  710.                 fname[length] = c;
  711.                 fname[length+1] = '_';
  712.                 fname[length+2] = '\0';
  713.                 length++;
  714.             }
  715.             else
  716.                 if (c==8 && length>0) {
  717.                     drwstring(SET,15,0,"   ",82+length*8,96);
  718.                     length--;
  719.                     fname[length] = '_';
  720.                     fname[length+1] = '\0';
  721.                 }
  722.                 else
  723.                     if (c==13)
  724.                         ext = 1;
  725.         }
  726.         if (length==0) {
  727.             free(fname);
  728.             return(ret);
  729.         }
  730.  
  731.         fname[length] = '\0';
  732.  
  733.         ret = showpcx(fname);
  734.  
  735.         if ((ret=='s') || (ret=='q')) {
  736.             fillscreen(0);
  737.             free(fname);
  738.             return(ret);
  739.         }
  740.  
  741.         drwstring(SET,7,0,title,10,0);
  742.         sprintf(buf,"Would you like to see another (Y/N) ?");
  743.         drwstring(SET,7,0,buf,10,64);
  744.         ext = 0;
  745.         while(!ext) {
  746.             c=(char)getch();
  747.             if ((c=='n') || (c=='N')) {
  748.                 ext = 1;
  749.                 endthis = 1;
  750.             }
  751.             else
  752.                 if ((c=='y') || (c=='Y'))
  753.                     ext = 1;
  754.         }
  755.     }
  756.     fillscreen(0);
  757.  
  758.     free(fname);
  759.     
  760.     return(ret);
  761.  
  762. }
  763.  
  764. /**************
  765.  * DOJOYSTICK *
  766.  **************/
  767.  
  768. char dojoystick(void)
  769. {
  770.     int maxxa, maxya, minxa, minya;
  771.     int maxxb, maxyb, minxb, minyb;
  772.     int jax, jay, jabuts, jbx, jby, jbbuts;
  773.     int joystick, spcing, dist;
  774.     int x1, y1, x2, y2, x3, y3, x4, y4;
  775.     int cntax, cntay, cntbx, cntby;
  776.     int rangexa, rangeya, rangexb, rangeyb;
  777.     int jabax, jabay, jabbx, jabby;
  778.     int jbbax, jbbay, jbbbx, jbbby;
  779.     int oax, oay, obx, oby;
  780.     char ret;
  781.     char title[TITLEN];
  782.     char buf[TITLEN];
  783.  
  784.     oax = oay = obx = oby = 0;
  785.  
  786.     /*
  787.      * Set up the title
  788.      */
  789.     sprintf(title,"DEMO 10: Joystick functions");
  790.     palset(pal,0,255);
  791.     fillscreen(0);
  792.     setview(0,0,maxx,maxy);
  793.     drwstring(SET,7,0,title,10,0);
  794.  
  795.     /*
  796.      * Check to see if we have a joystick so we can do the joystick demo
  797.      */
  798.     joystick = whichjoystick();
  799.     if (joystick < 1) {
  800.         sprintf(buf,"Sorry, no joystick detected... Can not do the joystick demo.");
  801.         drwstring(SET,7,0,buf,10,16);
  802.         ret = getkey();
  803.         fillscreen(0);
  804.         return(ret);
  805.     }
  806.  
  807.     /*
  808.      * Show joystickinfo (here we do some joystick calibration
  809.      */
  810.     sprintf(buf,"joystickinfo(jax,jay,jabuts,jbx,jby,jbbuts);");
  811.     drwstring(SET,7,0,buf,10,16);
  812.     switch(joystick) {
  813.         case 1:
  814.             sprintf(buf,"Please move Joystick A as far as it will go in all directions.");
  815.             break;
  816.         case 2:
  817.             sprintf(buf,"Please move Joystick B as far as it will go in all directions.");
  818.             break;
  819.         case 3:
  820.             sprintf(buf,"Please move Joystick A and B as far as they will go in all directions.");
  821.             break;
  822.     }
  823.     drwstring(SET,7,0,buf,10,32);
  824.     drwstring(SET,7,0,"And then press a key...",10,48);
  825.  
  826.     maxxa = -1;
  827.     maxya = -1;
  828.     minxa = 10000;
  829.     minya = 10000;
  830.     maxxb = -1;
  831.     maxyb = -1;
  832.     minxb = 10000;
  833.     minyb = 10000;
  834.     do {
  835.         while(!kbhit()) {
  836.             joystickinfo(&jax,&jay,&jabuts,&jbx,&jby,&jbbuts);
  837.             if (joystick & 1) {
  838.                 if (jax>maxxa)
  839.                     maxxa = jax;
  840.                 if (jax<minxa)
  841.                     minxa = jax;
  842.                 if (jay>maxya)
  843.                     maxya = jay;
  844.                 if (jay<minya)
  845.                     minya = jay;
  846.             }
  847.             if (joystick & 2) {
  848.                 if (jbx>maxxb)
  849.                     maxxb = jbx;
  850.                 if (jbx<minxb)
  851.                     minxb = jbx;
  852.                 if (jby>maxyb)
  853.                     maxyb = jby;
  854.                 if (jby<minyb)
  855.                     minyb = jby;
  856.             }
  857.         }
  858.         ret = getkey();
  859.     } while ( ((joystick & 1) && ((maxxa==minxa) || (maxya==minya))) || 
  860.         ((joystick & 2) && ((maxxb==minxb) || (maxyb==minyb))) );
  861.  
  862.     if ((ret=='s') || (ret=='q')) {
  863.         setview(0,0,maxx,maxy);
  864.         fillscreen(0);
  865.         return(ret);
  866.     }
  867.  
  868.     /*
  869.      * Calculate the center and stuff
  870.      */
  871.     spcing = maxx / 7;
  872.     dist = spcing * 2;
  873.     x1 = spcing / 2;
  874.     y1 = spcing / 2 + 32;
  875.     x2 = x1 + dist;
  876.     y2 = y1 + dist;
  877.     x4 = maxx - spcing;
  878.     y4 = y2;
  879.     x3 = x4 - dist;
  880.     y3 = y1;
  881.     cntax = (x2 - x1) / 2 + x1;
  882.     cntay = (y2 - y1) / 2 + y1;
  883.     cntbx = (x4 - x3) / 2 + x3;
  884.     cntby = (y4 - y3) / 2 + y3;
  885.     rangexa = maxxa - minxa;
  886.     rangeya = maxya - minya;
  887.     rangexb = maxxb - minxb;
  888.     rangeyb = maxyb - minyb;
  889.     jabax = (x2 - x1) / 4 + x1 - 16;
  890.     jabay = spcing / 4 + y2 - 6;
  891.     jabbx = x2 - (x2 - x1) / 4 - 16;
  892.     jabby = spcing / 4 + y2 - 6;
  893.     jbbax = (x4 - x3) / 4 + x3 - 16;
  894.     jbbay = spcing / 4 + y4 - 6;
  895.     jbbbx = x4 - (x4 - x3) / 4 - 16;
  896.     jbbby = spcing / 4 + y4 - 6;
  897.  
  898.     /*
  899.      * Let's move it (or them) around
  900.      */
  901.     setview(0,32,maxx,maxy);
  902.     fillview(0);
  903.     drwstring(SET,7,0,"Joysticks are nonlinear devices and may not appear centered.",10,32);
  904.  
  905.     if (joystick & 1) {
  906.         drwbox(SET,15,x1-1,y1-1,x2+1,y2+1);
  907.         drwbox(SET,15,x1-1,y2+1,x2+1,y2+spcing/2);
  908.         drwline(SET,15,(x2-x1)/2+x1,y2+1,(x2-x1)/2+x1,y2+spcing/2);
  909.         oax = cntax;
  910.         oay = cntay;
  911.         drwline(SET,10,cntax,cntay,oax,oay);
  912.     }
  913.     else {
  914.         drwbox(SET,8,x1-1,y1-1,x2+1,y2+1);
  915.         drwbox(SET,8,x1-1,y2+1,x2+1,y2+spcing/2);
  916.         drwline(SET,8,(x2-x1)/2+x1,y2+1,(x2-x1)/2+x1,y2+spcing/2);
  917.     }
  918.     if (joystick & 2) {
  919.         drwbox(SET,15,x3-1,y3-1,x4+1,y4+1);
  920.         drwbox(SET,15,x3-1,y4+1,x4+1,y4+spcing/2);
  921.         drwline(SET,15,(x4-x3)/2+x3,y4+1,(x4-x3)/2+x3,y4+spcing/2);
  922.         obx = cntbx;
  923.         oby = cntby;
  924.         drwline(SET,10,cntbx,cntby,obx,oby);
  925.     }
  926.     else {
  927.         drwbox(SET,8,x3-1,y3-1,x4+1,y4+1);
  928.         drwbox(SET,8,x3-1,y4+1,x4+1,y4+spcing/2);
  929.         drwline(SET,8,(x4-x3)/2+x3,y4+1,(x4-x3)/2+x3,y4+spcing/2);
  930.     }
  931.     while(!kbhit()) {
  932.         joystickinfo(&jax,&jay,&jabuts,&jbx,&jby,&jbbuts);
  933.         if (joystick & 1) {
  934.             setview(x1,y1,x2,y2);
  935.             jax = jax - minxa;
  936.             jax = jax * dist / rangexa + x1;
  937.             jay = jay - minya;
  938.             jay = jay * dist / rangeya + y1;
  939.             drwline(SET,0,cntax,cntay,oax,oay);
  940.             oax = jax;
  941.             oay = jay;
  942.             drwline(SET,10,cntax,cntay,oax,oay);
  943.             setview(0,0,maxx,maxy);
  944.             sprintf(buf,"ButA");
  945.             if (jabuts & 1)
  946.                 drwstring(SET,10,0,buf,jabax,jabay);
  947.             else
  948.                 drwstring(SET,8,0,buf,jabax,jabay);
  949.             sprintf(buf,"ButB");
  950.             if (jabuts & 2)
  951.                 drwstring(SET,10,0,buf,jabbx,jabby);
  952.             else
  953.                 drwstring(SET,8,0,buf,jabbx,jabby);
  954.         }
  955.         if (joystick & 2) {
  956.             setview(x3,y3,x4,y4);
  957.             jbx = jbx - minxb;
  958.             jbx = jbx * dist / rangexb + x3;
  959.             jby = jby - minyb;
  960.             jby = jby * dist / rangeyb + y3;
  961.             drwline(SET,0,cntbx,cntby,obx,oby);
  962.             obx = jbx;
  963.             oby = jby;
  964.             drwline(SET,10,cntbx,cntby,obx,oby);
  965.             setview(0,0,maxx,maxy);
  966.             sprintf(buf,"ButA");
  967.             if (jbbuts & 1)
  968.                 drwstring(SET,10,0,buf,jbbax,jbbay);
  969.             else
  970.                 drwstring(SET,8,0,buf,jbbax,jbbay);
  971.             sprintf(buf,"ButB");
  972.             if (jbbuts & 2)
  973.                 drwstring(SET,10,0,buf,jbbbx,jbbby);
  974.             else
  975.                 drwstring(SET,8,0,buf,jbbbx,jbbby);
  976.         }
  977.     }
  978.     ret = getkey();
  979.     fillscreen(0);
  980.     setview(0,0,maxx,maxy);
  981.     return(ret);
  982. }
  983.  
  984.  
  985. /***********
  986.  * SHOWPCX *
  987.  ***********/
  988.  
  989. char showpcx(char fname[])
  990. {
  991.     int i, ok;
  992.     int mincolor, maxcolor;
  993.     int xsize, ysize, numcol;
  994.     int xloc, yloc;
  995.     int fixit;
  996.     long t,min,max;
  997.     PaletteData pcxpal;
  998.     char ret;
  999.     char *buf;
  1000.  
  1001.     buf = malloc(TITLEN);
  1002.  
  1003.     mincolor = maxcolor = 0;
  1004.  
  1005.     /*
  1006.      * Show pcxgetinfo
  1007.      */
  1008.     palset(orgpal,0,255);
  1009.     setview(0,0,maxx,maxy);
  1010.     fillscreen(0);
  1011.     drwstring(SET,7,0,"DEMO 8: PCX functions",10,0);
  1012.     sprintf(buf,"pcxgetinfo(filename,pcxxsize,pcxysize,numcolors,palette);");
  1013.     drwstring(SET,7,0,buf,10,16);
  1014.     ok = pcxgetinfo(fname,&xsize,&ysize,&numcol,pcxpal);
  1015.     min = pow(255,2) * 3;
  1016.     max = 0;
  1017.     if (ok == 1) {
  1018.         /*
  1019.          * We need to check the PCX color palette entries to see if any colors
  1020.          * are greater than six bits in length as the VGA color palette
  1021.          * registers are only six bits wide.  We also look for the brightest
  1022.          * and darkest colors to use as our text and background colors.
  1023.          */
  1024.         fixit = 0;
  1025.         for(i=0;i<numcol;i++) {
  1026.             if((pcxpal[i].r>63) || (pcxpal[i].g>63) || (pcxpal[i].b>63))
  1027.                 fixit = 1;
  1028.             t = pow(pcxpal[i].r,2) + pow(pcxpal[i].g,2) + pow(pcxpal[i].b,2);
  1029.             if(t<min) {
  1030.                 min = t;
  1031.                 mincolor = i;
  1032.             }
  1033.             if(t>max) {
  1034.                 max = t;
  1035.                 maxcolor = i;
  1036.             }
  1037.         }
  1038.         /*
  1039.          * If the PCX uses more than 6 bit color, then we shift each color entry
  1040.          * right by 2 bits.  (This reduces it to 6 bits of color.)
  1041.          */
  1042.         if (fixit)
  1043.             for(i=0;i<numcol;i++) {
  1044.                 pcxpal[i].r>>=2;
  1045.                 pcxpal[i].g>>=2;
  1046.                 pcxpal[i].b>>=2;
  1047.             }
  1048.         /*
  1049.          * If the PCX has a palette of 128 colors or less, then we can use
  1050.          * our own colors for the text and background.
  1051.          */
  1052.         if (numcol<=128) {
  1053.             pcxpal[254].r = pcxpal[254].g = pcxpal[254].b = 0;
  1054.             mincolor = 254;
  1055.             pcxpal[255].r = pcxpal[255].g = pcxpal[255].b = 32;
  1056.             maxcolor = 255;
  1057.         }
  1058.  
  1059.         sprintf(buf,"'%s' is identified as a v3.0 PCX image.",fname);
  1060.         drwstring(SET,15,0,buf,10,64);
  1061.         sprintf(buf,"Dimensions are: %d pixels wide and %d pixels high.",xsize,ysize);
  1062.         drwstring(SET,15,0,buf,10,80);
  1063.         sprintf(buf,"Number of colors: %d.",numcol);
  1064.         drwstring(SET,15,0,buf,10,96);
  1065.  
  1066.         ret = getkey();
  1067.         if ((ret=='s') || (ret=='q')) {
  1068.             fillscreen(0);
  1069.             setview(0,0,maxx,maxy);
  1070.             palset(orgpal,0,255);
  1071.             free(buf);
  1072.             return(ret);
  1073.         }
  1074.  
  1075.         /*
  1076.          * Show pcxput
  1077.          */
  1078.         palset(pcxpal,0,255);
  1079.         overscanset(mincolor);
  1080.         fillscreen(mincolor);
  1081.         drwstring(SET,maxcolor,mincolor,"DEMO 8: PCX functions",10,0);
  1082.         sprintf(buf,"pcxput(mode,x,y,filename);");
  1083.         drwstring(SET,maxcolor,mincolor,buf,10,16);
  1084.         setview(0,32,maxx,maxy);
  1085.         xloc = maxx / 2 - xsize / 2;
  1086.         yloc = (maxy - 32) / 2 - ysize / 2 + 32;
  1087.         ok = pcxput(SET,xloc,yloc,fname);
  1088.         if (ok!=1) {
  1089.             palset(orgpal,0,255);
  1090.             sprintf(buf,"The file '%s'",fname);
  1091.             switch (ok) {
  1092.                 case 0:
  1093.                     strcat(buf," does not exist in the specified directory.");
  1094.                     break;
  1095.                 case -1:
  1096.                     strcat(buf," is not a v3.0 PCX file.");
  1097.                     break;
  1098.                 case -2:
  1099.                     strcat(buf," is not run length encoded.");
  1100.                     break;
  1101.                 default: /* should have a value of -3 */
  1102.                     strcat(buf," has some general error.");
  1103.             }
  1104.             drwstring(SET,15,0,buf,10,64);
  1105.         }
  1106.     }
  1107.     else {
  1108.         palset(orgpal,0,255);
  1109.         sprintf(buf,"The file '%s'",fname);
  1110.         switch (ok) {
  1111.             case 0:
  1112.                 strcat(buf," does not exist in the specified directory.");
  1113.                 break;
  1114.             case -1:
  1115.                 strcat(buf," is not a v3.0 PCX file.");
  1116.                 break;
  1117.             case -2:
  1118.                 strcat(buf," is not run length encoded.");
  1119.                 break;
  1120.             default: /* should have a value of -3 */
  1121.                 strcat(buf," has some general error.");
  1122.         }
  1123.         drwstring(SET,15,0,buf,10,64);
  1124.     }
  1125.  
  1126.     ret = getkey();
  1127.  
  1128.     palset(orgpal,0,255);
  1129.     overscanset(0);
  1130.     fillscreen(0);
  1131.     setview(0,0,maxx,maxy);
  1132.     free(buf);
  1133.     return(ret);
  1134. }
  1135.  
  1136.  
  1137. /*************
  1138.  * SHOWHOUSE *
  1139.  *************/
  1140.  
  1141. void showhouse(D2Point *plotarray, D2Point *oplotarray)
  1142. {
  1143.     int i;
  1144.  
  1145.     /* Erase old axes */
  1146.     drwline(SET,0,(oplotarray+10)->x,(oplotarray+10)->y,(oplotarray+11)->x,(oplotarray+11)->y);
  1147.     drwline(SET,0,(oplotarray+10)->x,(oplotarray+10)->y,(oplotarray+12)->x,(oplotarray+12)->y);
  1148.     drwline(SET,0,(oplotarray+10)->x,(oplotarray+10)->y,(oplotarray+13)->x,(oplotarray+13)->y);
  1149.     
  1150.     /* Erase old house */
  1151.     for(i=0;i<3;i++) {
  1152.         drwline(SET,0,(oplotarray+i)->x,(oplotarray+i)->y,(oplotarray+i+1)->x,(oplotarray+i+1)->y);
  1153.         drwline(SET,0,(oplotarray+i+4)->x,(oplotarray+i+4)->y,(oplotarray+i+4+1)->x,(oplotarray+i+4+1)->y);
  1154.         drwline(SET,0,(oplotarray+i)->x,(oplotarray+i)->y,(oplotarray+i+4)->x,(oplotarray+i+4)->y);
  1155.     }
  1156.     drwline(SET,0,(oplotarray+3)->x,(oplotarray+3)->y,(oplotarray+7)->x,(oplotarray+7)->y);
  1157.     drwline(SET,0,(oplotarray+0)->x,(oplotarray+0)->y,(oplotarray+3)->x,(oplotarray+3)->y);
  1158.     drwline(SET,0,(oplotarray+4)->x,(oplotarray+4)->y,(oplotarray+7)->x,(oplotarray+7)->y);
  1159.     drwline(SET,0,(oplotarray+3)->x,(oplotarray+3)->y,(oplotarray+8)->x,(oplotarray+8)->y);
  1160.     drwline(SET,0,(oplotarray+8)->x,(oplotarray+8)->y,(oplotarray+2)->x,(oplotarray+2)->y);
  1161.     drwline(SET,0,(oplotarray+9)->x,(oplotarray+9)->y,(oplotarray+7)->x,(oplotarray+7)->y);
  1162.     drwline(SET,0,(oplotarray+9)->x,(oplotarray+9)->y,(oplotarray+6)->x,(oplotarray+6)->y);
  1163.     drwline(SET,0,(oplotarray+8)->x,(oplotarray+8)->y,(oplotarray+9)->x,(oplotarray+9)->y);
  1164.  
  1165.     /* Draw new axes */
  1166.     drwline(SET,8,(plotarray+10)->x,(plotarray+10)->y,(plotarray+11)->x,(plotarray+11)->y);
  1167.     drwline(SET,8,(plotarray+10)->x,(plotarray+10)->y,(plotarray+12)->x,(plotarray+12)->y);
  1168.     drwline(SET,8,(plotarray+10)->x,(plotarray+10)->y,(plotarray+13)->x,(plotarray+13)->y);
  1169.     
  1170.     /* Draw new house */
  1171.     for(i=0;i<3;i++) {
  1172.         drwline(SET,10,(plotarray+i)->x,(plotarray+i)->y,(plotarray+i+1)->x,(plotarray+i+1)->y);
  1173.         drwline(SET,10,(plotarray+i+4)->x,(plotarray+i+4)->y,(plotarray+i+4+1)->x,(plotarray+i+4+1)->y);
  1174.         drwline(SET,10,(plotarray+i)->x,(plotarray+i)->y,(plotarray+i+4)->x,(plotarray+i+4)->y);
  1175.     }
  1176.     drwline(SET,10,(plotarray+3)->x,(plotarray+3)->y,(plotarray+7)->x,(plotarray+7)->y);
  1177.     drwline(SET,10,(plotarray+0)->x,(plotarray+0)->y,(plotarray+3)->x,(plotarray+3)->y);
  1178.     drwline(SET,10,(plotarray+4)->x,(plotarray+4)->y,(plotarray+7)->x,(plotarray+7)->y);
  1179.     drwline(SET,10,(plotarray+3)->x,(plotarray+3)->y,(plotarray+8)->x,(plotarray+8)->y);
  1180.     drwline(SET,10,(plotarray+8)->x,(plotarray+8)->y,(plotarray+2)->x,(plotarray+2)->y);
  1181.     drwline(SET,10,(plotarray+9)->x,(plotarray+9)->y,(plotarray+7)->x,(plotarray+7)->y);
  1182.     drwline(SET,10,(plotarray+9)->x,(plotarray+9)->y,(plotarray+6)->x,(plotarray+6)->y);
  1183.     drwline(SET,10,(plotarray+8)->x,(plotarray+8)->y,(plotarray+9)->x,(plotarray+9)->y);
  1184.  
  1185.     /* Save old points */
  1186.     bytecopy(plotarray,oplotarray,14*sizeof(*plotarray));
  1187.  
  1188.     return;
  1189. }
  1190.  
  1191. /************
  1192.  * SHOWSTAR *
  1193.  ************/
  1194.  
  1195. void showstar(D2Point *plotarray, D2Point *oplotarray)
  1196. {
  1197.     int i;
  1198.  
  1199.     for(i=0;i<8;i++)
  1200.         drwline(SET,0,(oplotarray+i)->x,(oplotarray+i)->y,((oplotarray+i)+1)->x,((oplotarray+i)+1)->y);
  1201.     for(i=0;i<8;i++)
  1202.         drwline(SET,10,(plotarray+i)->x,(plotarray+i)->y,((plotarray+i)+1)->x,((plotarray+i)+1)->y);
  1203.     bytecopy(plotarray,oplotarray,9*sizeof(*plotarray));
  1204.     return;
  1205. }
  1206.